/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import controladores.ConvenioFacadeLocal;
import controladores.EntidadFacadeLocal;
import controladores.SitioFacadeLocal;
import controladores.SupervisorXEntidadFacadeLocal;
import entidades.Entidad;
import entidades.Sitio;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.EJBContext;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;

/**
 *
 * @author BATAQUERO
 */
@Stateless(mappedName = "EntidadEJB")
@TransactionManagement(TransactionManagementType.BEAN)
public class EntidadSrv implements EntidadInterface{
    //Importante cargar el resource  dado que sin este no hay conexion para la persistencia
    @Resource
    private EJBContext context;
    private UserTransaction utx;
    @EJB
    private EntidadFacadeLocal entidadFacadeLocal;
    @EJB
    private SupervisorXEntidadFacadeLocal supervisorXEntidadFacadeLocal;
    @EJB
    private SitioFacadeLocal sitioFacadeLocal;
    @EJB
    private ConvenioFacadeLocal convenioFacadeLocal;
    
    @Override
    public List<Entidad> listarEntidades() {
        System.out.println("paso por el srv");
        return entidadFacadeLocal.findAll();
    }
    
    @Override
    public List<Entidad> listarEntidadesVisibles() {
        System.out.println("paso por el srv");
        return entidadFacadeLocal.consultarEntidadesVisibles(true);
    }

    @Override
    public void crear(Entidad entidad, Sitio sitio) {
        try {
            System.out.println("entro al svr de entidad-----------------");
            utx = context.getUserTransaction();
            utx.begin();
            entidadFacadeLocal.create(entidad);
            sitioFacadeLocal.create(sitio);
            utx.commit();
        } catch (NotSupportedException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (RollbackException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (HeuristicMixedException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (HeuristicRollbackException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SecurityException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalStateException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SystemException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public List<Entidad> listarEntidadesVisibles(boolean visibleEntidad) {
        return entidadFacadeLocal.consultarEntidadesVisibles(visibleEntidad);
    }

    @Override
    public Entidad consultarEntidad(Integer idEntidad) {
        System.out.println("-------------consultarEntidad en entidad srv");
        Entidad entidad = entidadFacadeLocal.consultarEntidad(idEntidad);
        entidad.setSupervisorXEntidadList(supervisorXEntidadFacadeLocal.consultarSupervisoresXEntidad(idEntidad));
        entidad.setSitioList(sitioFacadeLocal.consultarSitiosXEntidad(entidad));
        entidad.setConvenioList(convenioFacadeLocal.consultarConvenioXEntidad(entidad));
        return entidad;
    }

    @Override
    public void actualizarEstado(Entidad entidad) {
        try{
            System.out.println("entro al svr de entidad   Actualizar-----------------");
            utx = context.getUserTransaction();
            utx.begin();
            entidadFacadeLocal.edit(entidad);
            utx.commit();
        
        } catch (NotSupportedException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (RollbackException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (HeuristicMixedException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (HeuristicRollbackException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SecurityException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalStateException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SystemException ex) {
            Logger.getLogger(EntidadSrv.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    

    
}
